export type FormLayout = 'horizontal' | 'vertical';

/**
 * 表单配置项
 */
export namespace TemplateFormConfig {
  // 查询表单配置项
  export interface SelectFormConfig {
    // 显示查询
    showSelect: boolean;
    // 是否数据字典
    dictSelect: boolean;
    // 是否表下拉
    tableSelect: boolean;
    // 表单项布局
    layout?: FormLayout;
    // 表单栅格布局
    wrapperClass?: string;
    // 是否显示展开/折叠
    showCollapseButton?: boolean;
    // 操作按钮是否反转（提交按钮前置）
    actionButtonsReverse?: boolean;
    // 是否显示默认操作按钮
    showDefaultActions?: boolean;
    // 是否在字段值改变时提交表单
    submitOnChange?: boolean;
    // 是否在回车时提交表单
    submitOnEnter?: boolean;
    // 表单项通用后备配置，当子项目没配置时使用这里的配置，子项目配置优先级高于此配置
    commonConfig?: {
      // 在Label后显示一个冒号
      colon?: boolean;
      // 表单项的label宽度
      labelWidth?: number;
    };
  }
  // 表单组件参数
  export interface FormOptionComponentProps {
    // 提示
    placeholder: string;
  }
  // 表单组件其他配置信息(辅助代码生成)
  export interface FormOptionOtherConfig {
    // 是否搜索
    showSelect: boolean;
    // java包路径
    fieldPackagePath: string;
    // 关联模式（0关联模型 1关联字典）
    fieldRelevanceMode: number;
  }
  // 表单组件配置项
  export interface FormComponentConfig {
    /** 组件 */
    component: string;
    /** 组件参数 */
    componentProps?: FormOptionComponentProps;
    /** 默认值 */
    defaultValue?: any;
    /** 依赖 */
    dependencies?: any;
    /** 描述 */
    description?: string;
    /** 字段名 */
    fieldName: string;
    /** 帮助信息 */
    help?: string;
    /** 表单项 */
    label?: string;
    // 自定义组件内部渲染
    renderComponentContent?: any;
    /** 字段规则 */
    rules?: any;
    /** 后缀 */
    suffix?: any;
    /** 其他配置 */
    otherConfig?: FormOptionOtherConfig;
    // 字段顺序
    sequence: number;
  }
  // 表单配置项
  export interface FormConfig {
    // 打开表单的类型 modal, drawer
    openFormType: 'drawer' | 'modal';
    // 打开宽度 %
    openFormWidth: '30' | '50' | '80' | '100';
    // 表单项布局
    layout?: FormLayout;
    // 表单栅格布局
    wrapperClass?: string;
    // 表单项通用后备配置，当子项目没配置时使用这里的配置，子项目配置优先级高于此配置
    commonConfig?: {
      // 在Label后显示一个冒号
      colon?: boolean;
      // 所有表单项的props
      componentProps?: {
        class?: string;
      };
      // 所有表单项的label宽度
      labelWidth?: number;
    };
    // 是否展示表单默认按钮
    showDefaultActions: boolean;
    // 是否有字典下拉
    dict: boolean;
    // 是否有表字典下拉
    table: boolean;
  }
}

/**
 * 表格配置项
 */
export namespace TemplateTableConfig {
  // 表格配置字典项
  export interface TableDictConfig {
    // 是否存在字典
    exist: boolean;
    // 字典编码
    dictCodes: Array<string>;
  }
  // 表格基础配置
  export interface TableBaseConfig {
    // 是否展示序号
    showSerialNumber: boolean;
    // 是否展示选择列
    showChoose: boolean;
    // 字典
    dict: TableDictConfig;
  }
  // 表格列插槽配置
  export interface TableColumnsSlotsConfig {
    // 插槽名称
    default: string;
  }
  export interface TableOtherColumnsConfig {
    // 字典编码
    dictCode?: string;
  }
  // 表格列配置
  export interface TableColumnsConfig {
    // 列标题
    title: string;
    // 列字段名
    field: string;
    // left（左对齐）, center（居中对齐）, right（右对齐）
    align: 'center' | 'left' | 'right';
    // 类型: seq序号 checkbox复选框 radio单选框 expand展开行
    type?: 'checkbox' | 'expand' | 'radio' | 'seq';
    // 列宽度
    width?: number | string;
    // 默认是否显示
    visible: boolean;
    // 将列固定在左侧或者右侧 left（冻结左侧）, right（冻结右侧）
    fixed: 'left' | 'right';
    // 插槽
    slots: TableColumnsSlotsConfig;
    // 字段顺序
    sequence: number;
    // 其他配置
    otherConfig: TableOtherColumnsConfig;
  }
}

/**
 * 按钮配置项
 */
export interface TemplateButton {
  // 按钮类型
  type: 'dashed' | 'default' | 'ghost' | 'link' | 'primary' | 'text';
  // 按钮文本
  text: string;
  // 按钮样式Class
  class?: string;
  // 设置危险按钮
  danger?: boolean;
  // 设置按钮大小
  size?: 'large' | 'middle' | 'small';
  // 按钮方法
  handlerFun: string;
  // 按钮方法名称
  handlerFunName: string;
  // 操作方式: pop气泡确认框
  handlerWay: 'pop' | string;
  // 按钮功能类型
  btnFunctionType: 'add' | 'batchDel' | 'del' | 'edit';
}
